package com.generics;

public class CustomerGenericInterface {
    public static void main(String[] args) {

    }
}

//1.静态成员不能使用泛型

interface IUsb<U, R> {
    int n = 10;
    //U name = "aa";
    R get(U u);

    void hi(R r);

    void run(R r1, R r2, U u1, U u2);

    default  R method(U u){
        return null;
    }
}

//在继承接口，指定泛型接口的类型
interface  IA extends IUsb<String,Double>{

}

//当我们去实现IA 接口时，因为IA在继承IUsb接口时，制定了U为String，R 为 Double
//在实行IUsb接口的方法时，使用String替换U，Double 替换R
class AA implements  IA{
    @Override
    public Double get(String s) {
        return null;
    }

    @Override
    public void hi(Double aDouble) {

    }

    @Override
    public void run(Double r1, Double r2, String u1, String u2) {

    }

    @Override
    public Double method(String s) {
        return IA.super.method(s);
    }
}

//实现接口时，直接指定泛型接口的类型
//给U 指定 Integer ,R 制定了Float
//所以当我们实行IUsb方法时，会使用Integer 替换 U，Fload 替换R
class BB implements  IUsb<Integer,Float>{
    @Override
    public Float get(Integer integer) {
        return null;
    }

    @Override
    public void hi(Float aFloat) {

    }

    @Override
    public void run(Float r1, Float r2, Integer u1, Integer u2) {

    }
}

//没有指定类型，默认时Object类型
//建议 IUsb ==》 IUsb<Object,Object>
class CC implements  IUsb<Object,Object>{
    @Override
    public Object get(Object o) {
        return null;
    }

    @Override
    public void hi(Object o) {

    }

    @Override
    public void run(Object r1, Object r2, Object u1, Object u2) {

    }
}